#ifndef TRACK_DATA_TABLE_MODEL_02_H
#define TRACK_DATA_TABLE_MODEL_02_H

/*****************************************************************************************
  @Copyright  2020-2021
  @Date       2021-02-26
  @Author     qiaowei
  @Contact    weiweiqiao@126.com
  @Version    1.0
  @Brief      接收传入航迹字典的模型
  @Other      None
  @History    None
  @Functions  None
******************************************************************************************/

#include <QObject>
#include <QAbstractTableModel>
#include <QThread>

class Filter_track_data_operator;
class Track_data_02;

class Track_data_table_model_02 : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit Track_data_table_model_02(QObject *parent = nullptr);
    ~Track_data_table_model_02();

    /***************************************************************************
     @date     2021-02-26
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格的行数
     @param    parent 表格中项的父控件
     @return   表格的行数
    ***************************************************************************/
    virtual int rowCount(const QModelIndex &parent) const;

    /***************************************************************************
     @date     2021-02-26
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格的列数
     @param    parent 表格中项的父控件
     @return   表格的列数
    ***************************************************************************/
    virtual int columnCount(const QModelIndex &parent) const;

    /***************************************************************************
     @date     2021-02-26
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格中项显示的数据，航迹数据，字体，背景色
     @param    index 表格中项所在位置的索引
     @param    role 表格中项的角色
     @return   表格中项的数据
    ***************************************************************************/
    virtual QVariant data(const QModelIndex &index, int role) const;

    /***************************************************************************
     @date     2021-02-26
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表头显示的数据
     @param    section 行/列号
     @param    orientation 行/列标识
     @param    role 表头数据的角色
     @return   表头显示的数据
    ***************************************************************************/
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    Refresh model
    ***************************************************************************/
    void refresh_model();

    bool has_flight_track() const;

    void clear_track_data();

    QList<Track_data_02 *> *get_backup_track_data();

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    Set current page
     @Param    page Current page number
    ***************************************************************************/
    void set_current_page(int page);

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    Get current page
     @return   Current page number
    ***************************************************************************/
    int get_current_page() const;

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    设置每页的数据项数
     @Param    data_size 每页数据项数
    ***************************************************************************/
    void set_data_size_in_page(int data_size);

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    获取每页数据项数
     @Return   每页数据项数
    ***************************************************************************/
    int get_data_size_in_page() const;

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    Get the number of pages
     @Return
    ***************************************************************************/
    int get_page_count() const;

public slots:
    /***************************************************************************
     @Date     2021-04-24
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    Add track data to list and emit signal
     @Param    data Flight track
    ***************************************************************************/
    void sl_add_track_data(Track_data_02* data);

    void sl_add_filter_track_data(int row, bool flag);

    void sl_update_model_by_filter();

    void sl_clear_list();

signals:
    void si_get_track_list(QList<QMap<QString, QString>* >* list);

    void si_hide_row(int row) const;

    void si_show_row(int row) const;

    void si_is_show_row(bool flag, int row) const;

private:
    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    模型中数据总数
     @Return   数据总数
    ***************************************************************************/
    int list_count() const;

private:
    QThread filtered_data_thread_;

    QList<Track_data_02* >* list_;

    QList<Track_data_02* >* backup_list_;

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    当前页
    ***************************************************************************/
    int current_page_;

    /***************************************************************************
     @Date     2021-05-03
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    每页数据条数
    ***************************************************************************/
    int data_size_in_page_;
};

#endif // TRACK_DATA_TABLE_MODEL_02_H
